home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / ms_dos / txf / src / txfetc.c < prev    next >
C/C++ Source or Header  |  1993-07-08  |  5KB  |  234 lines

  1. /***************
  2. *
  3. * g:\exe\txf\src\txfetc.c
  4. */
  5. #include "txf.h"
  6.  
  7. int hex(char *str)
  8. {
  9.     int i, j, val = 0;
  10.  
  11.     for (j = 0; j < 2; j++) {
  12.         i = (int)(*(str + j));
  13.         if ((i < 0x30) || (i > 0x66)) i = 0;
  14.         if (i > 0x60) i -= 0x57;
  15.         if (i > 0x46) i = 0;
  16.         if (i > 0x40) i -= 0x37;
  17.         if (i > 0x39) i = 0;
  18.         if (i > 0x2f) i -= 0x30;
  19.         val += (i * ((j == 0) ? 16 : 1));
  20.     }
  21.     return (val);
  22. }
  23.  
  24. char *ftrans(char *form)
  25. {
  26.     int i = 0, j = 0, k = 0;
  27.     int len = strlen(form);
  28.     int chrattr = CT_ANK, lowk, highk;
  29.     char *original, *attr, *tmp, *str;
  30.  
  31.     if (form == NULL) {
  32.         errexit("find NULL pointer(ftrans)");
  33.     }
  34.     attr = malloc(len + 1);
  35.     original = form;
  36.     tmp = malloc(3000);
  37.     if (tmp == NULL) {
  38.         errexit("out of memory at ftrans()");
  39.     }
  40.     for (i = 0; *(original + i) != NUL; i++) {
  41.         chrattr = chkctype(*(original + i), chrattr);
  42.         *(attr + i) = chrattr;
  43.     }
  44.  
  45.     for (i = 0; i < len; i++) {
  46.         if ((*(original + i) == 0x5c) && (*(attr + i) == CT_ANK)) {
  47.             i++;
  48.             switch (*(original + i)) {
  49.             case 0x5c:
  50.                 *(tmp + j) = 0x5c;
  51.                 break;
  52.             case '-':
  53.                 *(tmp + j) = '-';
  54.                 break;
  55.             case '#':
  56.                 *(tmp + j) = '#';
  57.                 break;
  58.             case '_':
  59.                 *(tmp + j) = ' ';
  60.                 break;
  61.             case 0x81:
  62.                 if (*(original + i + 1) == 0x51) {
  63.                     i++;
  64.                     *(tmp+j) = 0x81;
  65.                     j++;
  66.                     *(tmp+j) = 0x40;
  67.                 }
  68.                 break;
  69.             case 'e':
  70.                 *(tmp + j) = '=';
  71.                 break;
  72.             case 'd':
  73.                 *(tmp + j) = 0x22;
  74.                 break;
  75.             case 'n':
  76.                 *(tmp + j) = 0x0d;
  77.                 j++;
  78.                 *(tmp + j) = 0x0a;
  79.                 break;
  80.             case 't':
  81.                 *(tmp + j) = TAB;
  82.                 break;
  83.             case 's':
  84.                 *(tmp + j) = ';';
  85.                 break;
  86.             case 'r':
  87.                 *(tmp + j) = '>';
  88.                 break;
  89.             case 'l':
  90.                 *(tmp + j) = '<';
  91.                 break;
  92.             case 'v':
  93.                 *(tmp + j) = '|';
  94.                 break;
  95.             case 'x':
  96.                 *(tmp + j) = hex(original + i + 1);
  97.                 i += 2;
  98.                 break;
  99.             case 'X':
  100.                 *(tmp + j) = hex(original + i + 1);
  101.                 j++;
  102.                 *(tmp + j) = hex(original + i + 3);
  103.                 i += 4;
  104.                 break;
  105.             default:
  106.                 *(tmp + j) = *(original + i);
  107.             }
  108.         }
  109.         else if ((*(original + i) == '-') && (*(attr + i) == CT_ANK)) {
  110.             if ((*(attr + i - 1) == CT_ANK) && (*(attr + i + 1) == CT_ANK)) {
  111.                 for (k = 1; (*(original+i-1) + k) <= *(original+i+1); k++) {
  112.                     *(tmp + (j++)) = *(original + i - 1) + k;
  113.                 }
  114.                 i++;
  115.                 j--;
  116.             }
  117.             else if ((*(attr+i-1) == CT_KJ2) && (*(attr+i+1) == CT_KJ1)) {
  118.                 lowk = (*(original + i - 2) << 8) | *(original + i - 1);
  119.                 highk = (*(original + i + 1) << 8) | *(original + i + 2);
  120.                 for (k = (lowk + 1); k <= highk; k++) {
  121.                     *(tmp + (j++)) = k >> 8;
  122.                     *(tmp + (j++)) = k & 0xff;
  123.                 }
  124.                 i += 2;
  125.                 j--;
  126.             }
  127.         }
  128.         else {
  129.             (*(tmp + j)) = (*(original + i));
  130.         }
  131.         j++;
  132.     }
  133.     *(tmp + j) = NUL;
  134.     str = malloc(strlen(tmp) + 1);
  135.     strcpy(str, tmp);
  136.     free(attr);
  137.     free(tmp);
  138.     return (str);
  139. }
  140.  
  141. int quotechk(int chr1, int chr2)
  142. {
  143.     if (iskanji(chr1)) {
  144.         if (jstrchr(kq, (chr2 | (chr1 << 8))) != NULL) return (1);
  145.     }
  146.     else {
  147.         if (jstrchr(kq, (chr1 & 0x0ff)) != NULL) return (1);
  148.     }
  149.     return (0);
  150. }
  151.  
  152. char *strspc(char *ptr, char find)
  153. {
  154.     while (*ptr != find) {
  155.         if (*ptr == NUL) {
  156.             return (ptr);
  157.         }
  158.         *ptr = NUL;
  159.         ptr++;
  160.     }
  161.     return (ptr);
  162. }
  163.  
  164. char *ktrans(char *str)
  165. {
  166.     char *buf;
  167.  
  168.     buf = ftrans(str);
  169.     return (buf);
  170. }
  171.  
  172.  
  173. void init_allswitch()
  174. {
  175.     int i;
  176.     inputfile[0] = NUL;
  177.     outputfile[0] = NUL;
  178.     for (i = 0; i < PARA_MAX; i++) {
  179.         para[i] = NULL;
  180.     }
  181.     for (i = 0; i < 2; i++) {
  182.         tfile[i][0] = NUL;
  183.     }
  184.     for (i = 0; i < 16; i++) {
  185.         exold[i] = NULL;
  186.         exnew[i] = NULL;
  187.     }
  188.     *bakfile = NUL;        /*    -rb    */
  189.     tabsize = 8;        /*    -t    */
  190.     tabx = 0;            /*    -x    tab展開    */
  191.     maxc = 76;            /*    -l    */
  192.     cent = 0;            /*    -c    */
  193.     left = -1;            /*    -ml    */
  194.     right = -1;            /*    -mr    */
  195.     retflg = 0;            /*    -r    */
  196.     quoteflg = 0;        /*    -q    引用文    */
  197.     base = -1;            /*    -b    */
  198.     tfile[0][0] = NUL;    /*    -d    */
  199.     tfile[1][0] = NUL;    /*    -d    */
  200.     exflg = 0;            /*    -e    */
  201.     format = 1;            /*    -n,-f    */
  202.     viewmode = 0;        /*    -v    */
  203.     sep = 0x22;            /*    -s    */
  204.     removeeofflg = 0;
  205.     removebakfile = 0;
  206.     useoldex = 0;
  207. }
  208.  
  209. void gettmpfile()
  210. {
  211.     if (getenv("TMP") != NULL) {
  212.         strncpy(tfile[0], getenv("TMP"), 64);
  213.         if (viewmode > 3) {
  214.             fprintf(stderr, "TMP 0:%s\n", tfile[0]);
  215.         }
  216.     }
  217.     else {
  218.         strncpy(tfile[0], basedir, 80);
  219.         if (strchr(tfile[0], 0x5c) != NULL) {
  220.             *(strrchr(tfile[0], 0x5c)) = NUL;
  221.         }
  222.         else if (strrchr(tfile[0], ':') != NULL) {
  223.             *(strrchr(tfile[0], ':') + 1) = NUL;
  224.         }
  225.         else{
  226.             tfile[0][0] = NUL;
  227.         }
  228.         if (viewmode > 3) {
  229.             fprintf(stderr, "TMP 0:%s\n", tfile[0]);
  230.         }
  231.     }
  232. }
  233.  
  234.